//package com.slofzx.nuoda.evaluation.version.service.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.slofzx.nuoda.common.enums.CommonResultEnum;
//import com.slofzx.nuoda.common.enums.ServiceResult;
//import com.slofzx.nuoda.common.service.impl.BaseServiceImpl;
//import com.slofzx.nuoda.common.util.DataConvertUtil;
//import com.slofzx.nuoda.common.util.IdGen;
//import com.slofzx.nuoda.common.util.ReflectionsUtil;
//import com.slofzx.nuoda.common.vo.SysUserVO;
//import com.slofzx.nuoda.evaluation.project.entity.ProjectInfo;
//import com.slofzx.nuoda.evaluation.project.observer.ProjectObserver;
//import com.slofzx.nuoda.evaluation.version.dao.ProjectReportDetailYearDAO;
//import com.slofzx.nuoda.evaluation.version.dto.ProjectReportDetailYearDTO;
//import com.slofzx.nuoda.evaluation.version.entity.ProjectReportDetailYear;
//import com.slofzx.nuoda.evaluation.version.service.ProjectReportDetailYearService;
//import com.slofzx.nuoda.evaluation.version.vo.ProjectReportDetailYearVO;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.*;
//
///**
// * 项目评价结果详情数据(年份相关)服务实现类
// *
// * @author nuoda
// * @since 2022-11-10 15:25:21
// */
//@Service("projectReportDetailYearService")
//public class ProjectReportDetailYearServiceImpl extends BaseServiceImpl implements ProjectReportDetailYearService, ProjectObserver {
//    @Resource
//    private ProjectReportDetailYearDAO projectReportDetailYearDAO;
////    @Resource
////    private ProjectReportDAO projectReportDAO;
//
//    /**
//     * 将数据表数据转换为返回数据类型
//     *
//     * @param entity 数据表对应类
//     * @return 实例对象
//     */
//    protected ProjectReportDetailYearVO parseEntity2VO(ProjectReportDetailYear entity) {
//        ProjectReportDetailYearVO vo = new ProjectReportDetailYearVO();
//        vo.setId(entity.getId());
//        vo.setProjectId(entity.getProjectId());
//        vo.setReportId(entity.getReportId());
//        vo.setMark(entity.getMark());
//        vo.setItem(entity.getItem());
//        vo.setYear0(entity.getYear0());
//        vo.setYear1(entity.getYear1());
//        vo.setYear2(entity.getYear2());
//        vo.setYear3(entity.getYear3());
//        vo.setYear4(entity.getYear4());
//        vo.setYear5(entity.getYear5());
//        vo.setYear6(entity.getYear6());
//        vo.setYear7(entity.getYear7());
//        vo.setYear8(entity.getYear8());
//        vo.setYear9(entity.getYear9());
//        vo.setYear10(entity.getYear10());
//        vo.setYear11(entity.getYear11());
//        vo.setYear12(entity.getYear12());
//        vo.setYear13(entity.getYear13());
//        vo.setYear14(entity.getYear14());
//        vo.setYear15(entity.getYear15());
//        vo.setYear16(entity.getYear16());
//        vo.setYear17(entity.getYear17());
//        vo.setYear18(entity.getYear18());
//        vo.setYear19(entity.getYear19());
//        vo.setYear20(entity.getYear20());
//        vo.setCreateUser(entity.getCreateUser());
//        vo.setCreateTime(entity.getCreateTime());
//        return vo;
//    }
//
//    /**
//     * 将数据传递类转换为数据表数据类
//     *
//     * @param dto 数据传递类实例
//     * @return 实例对象
//     */
//    protected ProjectReportDetailYear parseDTO2Entity(ProjectReportDetailYearDTO dto) {
//        ProjectReportDetailYear entity = new ProjectReportDetailYear();
//        entity.setId(dto.getId());
//        entity.setProjectId(dto.getProjectId());
//        entity.setReportId(dto.getReportId());
//        entity.setMark(dto.getMark());
//        entity.setItem(dto.getItem());
//        entity.setYear0(dto.getYear0());
//        entity.setYear1(dto.getYear1());
//        entity.setYear2(dto.getYear2());
//        entity.setYear3(dto.getYear3());
//        entity.setYear4(dto.getYear4());
//        entity.setYear5(dto.getYear5());
//        entity.setYear6(dto.getYear6());
//        entity.setYear7(dto.getYear7());
//        entity.setYear8(dto.getYear8());
//        entity.setYear9(dto.getYear9());
//        entity.setYear10(dto.getYear10());
//        entity.setYear11(dto.getYear11());
//        entity.setYear12(dto.getYear12());
//        entity.setYear13(dto.getYear13());
//        entity.setYear14(dto.getYear14());
//        entity.setYear15(dto.getYear15());
//        entity.setYear16(dto.getYear16());
//        entity.setYear17(dto.getYear17());
//        entity.setYear18(dto.getYear18());
//        entity.setYear19(dto.getYear19());
//        entity.setYear20(dto.getYear20());
//        return entity;
//    }
//
//    /**
//     * 通过ID查询单条数据
//     *
//     * @param id 主键
//     * @return 实例对象
//     */
//    @Override
//    public ProjectReportDetailYearVO queryById(String id) {
//        ProjectReportDetailYear entity = this.projectReportDetailYearDAO.selectById(id);
//        if (entity == null) {
//            return null;
//        }
//        return parseEntity2VO(entity);
//    }
//
//    /**
//     * 查询多条数据
//     *
//     * @param dto 数据传递类实例对象
//     * @return 对象列表
//     */
//    @Override
//    public List<ProjectReportDetailYearVO> queryList(ProjectReportDetailYearDTO dto) {
//        //mybatis-plus 写法示例
//        //IPage<ProjectReportDetailYear> pageResult = this.evaModelDAO.selectPage(new Page<>(dto.getPageNo(),dto.getPageSize()),null);
//        //List<ProjectReportDetailYear> dataList = pageResult.getRecords();
//        //dto.setCount((int) pageResult.getTotal());
//        List<ProjectReportDetailYear> dataList = this.projectReportDetailYearDAO.queryList(dto);
//        if (null == dataList || dataList.isEmpty()) {
//            return Collections.emptyList();
//        }
//        List<ProjectReportDetailYearVO> resultList = new ArrayList(dataList.size());
//        for (ProjectReportDetailYear item : dataList) {
//            ProjectReportDetailYearVO vo = parseEntity2VO(item);
//            resultList.add(vo);
//        }
//        // TODO 添加其他关联查询数据
//        return resultList;
//    }
//
//    /**
//     * 新增数据
//     *
//     * @param dto 实例对象
//     * @return 操作结果
//     */
//    @Override
//    public ServiceResult create(ProjectReportDetailYearDTO dto) {
//        // TODO 添加校验逻辑
//        ProjectReportDetailYear entity = parseDTO2Entity(dto);
//        preInsert(entity);
//        this.projectReportDetailYearDAO.insert(entity);
//        return CommonResultEnum.SUCCESS;
//    }
//
//    /**
//     * 修改数据
//     *
//     * @param dto 实例对象
//     * @return 操作结果
//     */
//    @Override
//    public ServiceResult update(ProjectReportDetailYearDTO dto) {
//        String id = dto.getId();
//        if (StringUtils.isEmpty(id)) {
//            return CommonResultEnum.NOT_EXIST;
//        }
//        ProjectReportDetailYear entity = this.projectReportDetailYearDAO.selectById(id);
//        if (entity == null) {
//            return CommonResultEnum.NOT_EXIST;
//        }
//        // TODO 添加其他校验逻辑，如数据权限
//
//        entity.setProjectId(dto.getProjectId());
//        entity.setReportId(dto.getReportId());
//        entity.setMark(dto.getMark());
//        entity.setItem(dto.getItem());
//        entity.setYear0(dto.getYear0());
//        entity.setYear1(dto.getYear1());
//        entity.setYear2(dto.getYear2());
//        entity.setYear3(dto.getYear3());
//        entity.setYear4(dto.getYear4());
//        entity.setYear5(dto.getYear5());
//        entity.setYear6(dto.getYear6());
//        entity.setYear7(dto.getYear7());
//        entity.setYear8(dto.getYear8());
//        entity.setYear9(dto.getYear9());
//        entity.setYear10(dto.getYear10());
//        entity.setYear11(dto.getYear11());
//        entity.setYear12(dto.getYear12());
//        entity.setYear13(dto.getYear13());
//        entity.setYear14(dto.getYear14());
//        entity.setYear15(dto.getYear15());
//        entity.setYear16(dto.getYear16());
//        entity.setYear17(dto.getYear17());
//        entity.setYear18(dto.getYear18());
//        entity.setYear19(dto.getYear19());
//        entity.setYear20(dto.getYear20());
//        this.projectReportDetailYearDAO.updateById(entity);
//        return CommonResultEnum.SUCCESS;
//    }
//
//    /**
//     * 通过主键删除数据
//     *
//     * @param id 主键
//     * @return 操作结果
//     */
//    @Override
//    public ServiceResult deleteById(String id) {
//        // TODO 添加校验逻辑，如数据权限
//        this.projectReportDetailYearDAO.deleteById(id);
//        return CommonResultEnum.SUCCESS;
//    }
//
//
//    @Override
//    public ServiceResult deleteByProject(String projectId) {
//        projectReportDetailYearDAO.delete(new QueryWrapper<ProjectReportDetailYear>().lambda()
//                .eq(ProjectReportDetailYear::getProjectId,projectId));
//        return CommonResultEnum.SUCCESS;
//    }
//
//
//    /**
//     * 对相同类型不同评价开始年的数据进行现金流合并，相同年份的现金流相加
//     * 年份从评价期开始第一年的前一年开始
//     * @param voList
//     * @return
//     */
//    protected List<Double> mergeItemYearDataList(List<ProjectReportDetailYearVO> voList) {
//        //记录年份对应的现金值
//        Map<Integer,Double> resultMap = new HashMap<>();
//        //确定最早的一年及最后的一年
//        Integer minYear = null,maxYear = null;
//        for(ProjectReportDetailYearVO vo:voList) {
//            List<Double> list = getItemYearDataList(vo);
//            if(minYear == null) {
//                minYear = vo.getEvaFirstYear();
//            } else if(minYear>vo.getEvaFirstYear()) {
//                minYear = vo.getEvaFirstYear();
//            }
//            if(maxYear == null) {
//                maxYear = vo.getEvaFirstYear();
//            } else if(maxYear<vo.getEvaFirstYear()) {
//                maxYear = vo.getEvaFirstYear();
//            }
//            int year = vo.getEvaFirstYear()-1;
//            for(Double item:list) {
//                Double value = resultMap.get(year);
//                if(value == null){
//                    value = item;
//                } else {
//                    value+=item;
//                }
//                resultMap.put(year,value);
//                year++;
//            }
//        }
//
//        List<Double> resultList = new ArrayList<>();
//        for(int i = 0;i<=40;i++) {
//            int year = minYear+i-1;
//            Double value = resultMap.get(year);
//            if(value == null&&year>maxYear-1) {
//                break;
//            }
//            resultList.add(DataConvertUtil.parse2Double(value));
//        }
//        return resultList;
//    }
//
//    /**
//     * 获取现金流列表,以不为0的最后一年为结束年
//     * @param vo
//     * @return
//     */
//    protected List<Double> getItemYearDataList(ProjectReportDetailYearVO vo) {
//        List<Double> resultList = new ArrayList<>();
//        int lastIndex = 0;
//        for(int i=0;i<=20;i++) {
//            double value = DataConvertUtil.parse2Double(ReflectionsUtil.invokeGetter(vo,"year"+i));
//            resultList.add(value);
//            if(value!=0) {
//                lastIndex = i;
//            }
//        }
//        if(lastIndex>=20) {
//            return resultList;
//        }
//        return resultList.subList(0,lastIndex+1);
//    }
//
//    @Override
//    public ServiceResult createBatch(List<ProjectReportDetailYearDTO> cashFlowDTOList) {
//        SysUserVO user = getUser();
//        Date now = new Date();
//        List<ProjectReportDetailYear> entityList = new ArrayList<>();
//        for(ProjectReportDetailYearDTO item:cashFlowDTOList) {
//            ProjectReportDetailYear entity = parseDTO2Entity(item);
//            entity.setId(IdGen.uuid());
//            entity.setCreateUser(user.getId());
//            entity.setCreateTime(now);
//            entityList.add(entity);
//        }
//        saveBatch(entityList,projectReportDetailYearDAO,ProjectReportDetailYear.class);
//        return CommonResultEnum.SUCCESS;
//    }
//
//    @Override
//    public String getName() {
//        return "project-report-detail-year";
//    }
//
//    @Override
//    public ServiceResult handleProjectCreate(ProjectInfo project) {
//        return CommonResultEnum.SUCCESS;
//    }
//
//    @Override
//    public ServiceResult handleProjectDelete(ProjectInfo project) {
//        this.projectReportDetailYearDAO.delete(new LambdaQueryWrapper<ProjectReportDetailYear>().eq(ProjectReportDetailYear::getProjectId,project.getId()));
//        return CommonResultEnum.SUCCESS;
//    }
//
//}
